package com.bienvenue.main.weight;

import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import com.bienvenue.main.R;

/**
 * 　　　　　　　 ┏┓       ┏┓+ +
 * 　　　　　　　┏┛┻━━━━━━━┛┻┓ + +
 * 　　　　　　　┃　　　　　　 ┃
 * 　　　　　　　┃　　　━　　　┃ ++ + + +
 * 　　　　　　 █████━█████  ┃+
 * 　　　　　　　┃　　　　　　 ┃ +
 * 　　　　　　　┃　　　┻　　　┃
 * 　　　　　　　┃　　　　　　 ┃ + +
 * 　　　　　　　┗━━┓　　　 ┏━┛
 * ┃　　  ┃
 * 　　　　　　　　　┃　　  ┃ + + + +
 * 　　　　　　　　　┃　　　┃　Code is far away from     bug with the animal protecting
 * 　　　　　　　　　┃　　　┃ + 　　　　         神兽保佑,代码无bug
 * 　　　　　　　　　┃　　　┃
 * 　　　　　　　　　┃　　　┃　　+
 * 　　　　　　　　　┃　 　 ┗━━━┓ + +
 * 　　　　　　　　　┃ 　　　　　┣┓
 * 　　　　　　　　　┃ 　　　　　┏┛
 * 　　　　　　　　　┗┓┓┏━━━┳┓┏┛ + + + +
 * 　　　　　　　　　 ┃┫┫　 ┃┫┫
 * 　　　　　　　　　 ┗┻┛　 ┗┻┛+ + + +
 *
 * @ProjectName: Bienvenue
 * @Package: com.bienvenue.main.weight
 * @ClassName: MyTouchBall
 * @Description: 自定义view
 * @Author: Mr.Chen
 * @UpdateUser: Mr.Chen
 * @UpdateDate: 2020/9/17
 * @UpdateRemark: 更新说明
 * @Version: 1.0
 */
public class MyTouchBall extends View {

    //    火箭缩放比例
    private int mImgSampleSize = 10;
    private int mDuration = 500;
    private Bitmap bitmap;
    private Paint paint;

    //缩放后，图片的实际高度
    private int mImgHeight;
    //缩放后，图片的实际宽度
    private int mImgWidth;


    //    是在java代码创建视图的时候被调用，如从xml填充的视图，就不会调用这个
    public MyTouchBall(Context context) {
        super(context);
    }

    //这个是在xml创建但是没有指定style的时候被调用
    public MyTouchBall(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyTouchBall);
        int count = typedArray.getIndexCount();
        for (int i = 0; i < count; i++) {
            int attr = typedArray.getIndex(i);
            switch (attr) {
                case R.styleable.MyTouchBall_duration:
                    mDuration = typedArray.getInteger(attr, 500);
                    break;
                case R.styleable.MyTouchBall_imgSampleSize:
                    mImgSampleSize = typedArray.getInteger(attr, 30);
                    break;
                default:
                    break;
            }
        }
        setBackgroundColor(getResources().getColor(R.color.color_39A4D8));
        typedArray.recycle();//将typedArry清空，循环给下一个调用者使用

        //根据属性计算火箭图片的宽高
        bitmap = decodeSampledBitmap(getResources(), R.mipmap.icon_avatar_def, mImgSampleSize);
        mImgWidth = bitmap.getWidth();
        mImgHeight = bitmap.getHeight();

    }

    //给View提供一个基本的style
    public MyTouchBall(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

    }

    private static Bitmap decodeSampledBitmap(Resources resources, int resId, int simpleSize) {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = false;
        options.inSampleSize = simpleSize;
        //使用获取到的inSampleSize值解析图片
        return BitmapFactory.decodeResource(resources, resId, options);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);

        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int heightModel = MeasureSpec.getMode(heightMeasureSpec);

        int width = 0, height = 0;
        //使用者在布局文件里头指定了宽度
        if (widthMode == MeasureSpec.EXACTLY) { //使用者在布局文件里指定了具体的宽度
            width = widthSize;
        } else {  //没有指定，或者设置成了wrap_content
            //这时候要计算具体的数值,宽度取图片的宽度
            width = mImgWidth;
        }
        //使用布局文件设置的高度
        if (heightModel == MeasureSpec.EXACTLY) {
            height = heightSize;
        } else {
            //没有指定，或者设置成了wrap_content
            //这时候要计算具体的数值，获取图片的高度
            height=mImgHeight;
        }
        setMeasuredDimension(width, height);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint=new Paint();
        canvas.drawBitmap(bitmap,0,0,paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            startAnimations();
        }
        return false;
    }

    public void startAnimations(){
        //开始动画
        ObjectAnimator .ofFloat(this,"rotationX",0.0f,360.0f)
                .setDuration(mDuration)
                .start();
    }
}
